/*
  支付宝<10月摇一摇>
  【注意：此处用的助力码主要是为了自动进入会场，顺便助力作者，介意的话记得改成自己的邀请码】

  已知问题：

  Q：使用脚本后容易出现活动火爆提醒
  A：暂时增加随机等待时间，观察是否缓解

  待更新功能：
  无

  20211012 V1.3
  调整摇到奖励的判断逻辑，去除多余的判断
  缩短部分等待时长
  20211013 V1.4
  增加本次金币数量记录
  调整界面异常时的处理方式
  在界面异常时，通过坐标点击进行下一次摇红包
  日志调整
  摇红包时判断逻辑调整
  20211013 V1.5
  调整摇红包间隔时长
  日志调整
  最后结尾日志容易卡住，调整判断逻辑
  20211013 V1.6
  解决红包奖励判断延后问题
  增加金币奖励统计功能
  等待时间改为随机，尝试缓解活动火爆
*/

auto.waitFor();//无障碍服务检测
console.show();//开启悬浮窗
setScreenMetrics(1440, 3120);//声明是基于分辨率1440，3120的点击
console.info("支付宝<10月摇一摇>任务");
setClip("fTai84J70bu");//通过作者助力码进入活动，也可以改成自己的邀请码
sleep(1000);
console.log("即将启动<支付宝>"); 
app.launchApp("支付宝");//打开支付宝 //如果在分身应用中无法跳转，可屏蔽此行
var RewardTimes=0//金币奖励次数
var NullRewardTimes=0//无奖励摇红包次数
var ShakeHongBaoTimes=0//摇红包次数
var GoldCoinQty=0//本次金币数量
var Status=1//运行状态（0：等待奖励中，不可摇红包；1：可摇红包）
while (text("摇红包").findOnce() == null) {
  console.info("未找到活动界面，请手动进入");
  sleep(3000);
}
if (text("摇红包").findOne() == null) {
  console.info("正在根据助力码进入活动页面");
  sleep(random(1000,2000));
  if(text("去看看").findOne() == null){
    console.log("等待APP识别助力码");
    var t = 0;
    while(t < 5 | text("去看看").findOne() == null){
      if(text("去看看").exists()){
        break;
      }
      t++;
      console.log(t);
      sleep(1000);
      if(t > 5){
        console.error("超时未检测到新助力码，请手动进入活动界面");
        sleep(1000);
        break;
      }
    }
  }
  while(text("去看看").exists() |text("关闭").exists()){
    if (text("去看看").exists()){
      sleep(random(1000,2000));
      console.log("去看看");
      text("去看看").findOne().click();
      text("关闭").waitFor();
      console.log("关闭");
      text("关闭").findOne().click();
      sleep(random(1000,1500));
      break;
    } else if(text("关闭").exists()){
      sleep(random(1000,2000));
      console.log("关闭");
      text("关闭").findOne().click();
    } else{
      console.log("助力完成");
      break;
    }
    sleep(random(1000,2000));
  }
  while (text("摇红包").findOne() == null) {
    console.info("未找到活动界面，请手动进入");
    sleep(3000);
  }
}
if (text("摇红包").exists()) {
  console.info("成功进入活动界面");
  console.log("等待加载弹窗……");
  for(var i = 0; i < 3; i++){//等待3秒，如有弹窗，提前进入下一步
    if(text("关闭").exists()){
      console.log("处理弹窗");
      break;
    }
    sleep(random(1000,2000));
  }
  while(text("关闭").exists()){
    console.log("处理弹窗");
    if (text("关闭").exists()) {
      text("关闭").findOne().click();
      console.log("关闭");
      sleep(random(1000,2000));
    }
  }
  console.log("弹窗处理完毕");
  sleep(random(1000,2000));
}
for(;;){
  if((text("领").exists() |text("个金币").exists() |text("去使用").exists() |textContains("再摇一个").exists()) && Status==0){
    sleep(random(1000,2000));
    RewardTimes=RewardTimes+1;
    if(text("个金币").exists()){
      console.log("摇到<金币>");
      GoldCoinQty=GoldCoinQty+parseInt(text("个金币").findOne().parent().child(1).text());//通过“个金币”关键字获取当前的金币奖励数
      console.log("领取"+text("个金币").findOne().parent().child(1).text()+"个金币");
    }
    else{
      console.log("摇到<优惠券>");//除了金币奖励，其他都是优惠券
    }
    console.log("第"+RewardTimes+"次<奖励>领取成功");
    NullRewardTimes=0;//获得奖励后，重新开始计算次数
    className("android.widget.Button").text("关闭").findOne().click();
    Status=1;//窗口关闭，还原状态
    sleep(random(1000,2000)+2000);
    continue;
  }
  //已到今日上限，结束循环，退出脚本
  else if(text("明天再来").exists() && Status==0){
    sleep(random(1000,2000));
    text("明天再来").findOne().click();
    console.error("已到今日上限，即将退出脚本");
    Status=1;//窗口关闭，还原状态
    break;
  }
  //如果提示提示活动火爆，等待5秒后再进入循环
  else if((text("好的，等会再来").exists() | textContains("人太多").exists() |text("一会再来").exists()) && Status==0){
    sleep(random(1000,2000));
    className("android.widget.Button").text("关闭").findOne().click();
    Status=1;//窗口关闭，还原状态
    console.error("活动火爆，等待5秒");
    NullRewardTimes=NullRewardTimes+5;//一次火爆，等于多次无奖励，以尽快退出脚本
    sleep(random(1000,2000)+4000);
    continue;
  }
  //没有摇到红包，关闭弹窗后，直接进入下次循环
  else if(className("android.widget.Button").text("关闭").exists() && Status==0) {
    sleep(random(1000,2000));
    className("android.widget.Button").text("关闭").findOne().click();
    console.log("关闭");
    NullRewardTimes=NullRewardTimes+1;
    Status=1;//窗口关闭，还原状态
    sleep(random(1000,2000)+1000);
  }
  //多次无奖励后，退出脚本
  if(NullRewardTimes > 20){
    console.error("连续20次无奖励，即将退出脚本");
    sleep(1000);
    break;
  }
  if(Status==1){
    if (text("摇红包").findOnce() == null) {
      //界面异常时，尝试坐标点击
      click(730,2165);
      Status=0;//更新状态，等待后续窗口
    }
    else{
      text("摇红包").findOne().click();
      Status=0;//更新状态，等待后续窗口
    }
    ShakeHongBaoTimes=ShakeHongBaoTimes+1;
    console.info("第"+ShakeHongBaoTimes+"次摇红包" );
    sleep(random(1000,1500));
  }
  while(text("正在匹配中...").exists()){
    if(text("领").exists()){
      break;
    }
    sleep(500);
  }
}
console.info("本次运行获得金币："+GoldCoinQty);
if(text("我的红包").findOnce() != null){
  console.info("当前红包金额："+text("我的红包").findOne().parent().child(1).text());
}
else{
  console.error("界面异常，无法识别红包金额");
}
if(text("可兑换金币").findOnce() != null){
  console.info("当前可兑换金币："+text("可兑换金币").findOne().parent().child(1).text());
  if(text("可兑换金币").findOne().parent().child(1).text() > 10000){
    console.log("金币已超1万，可手动兑换为红包");
  }
}
else{
  console.error("界面异常，无法识别可兑换金币");
}
console.log("结束任务");
home();
sleep(1000);
console.log("已退出脚本"); 
engines.myEngine().forceStop()